package libra.controller;

import java.nio.charset.Charset;
import java.util.Collection;
import java.util.Map;
import java.util.Map.Entry;

import feign.RequestInterceptor;
import feign.RequestTemplate;

/**
 * OpenFeign中的自定义拦截器
 */
public class FeignInterceptor implements RequestInterceptor {
	/**
	 * 重写该方法
	 */
	@Override
	public void apply(RequestTemplate template) {
		// 添加请求头参数
		template.header("libra_head_param", "libra_head_param");
		template.header("libra_head_temp", "libra_head_temp");
		// 获取请求头
		Map<String,Collection<String>> headers = template.headers();
		for( Entry<String, Collection<String>> entryHead : headers.entrySet() ){
			System.out.println("【请求头】" + entryHead.getKey() + ":" + entryHead.getValue() );
		}
		// 删除请求头
		template.removeHeader("libra_head_temp");
		// ???
		System.out.println( template.getRequestVariables() );
		
		
		// 添加请求参数
		template.query("libra_request_param", "libra_request_param");
		template.query("libra_request_temp", "libra_request_temp");
		// 获取请求参数
		Map<String,Collection<String>> queries = template.queries();
		for( Entry<String, Collection<String>> entryQuery : queries.entrySet() ){
			System.out.println( "【请求参数】" + entryQuery.getKey() + ":" + entryQuery.getValue() );
		}
		System.out.println( "【请求参数行】" + template.queryLine() );
		
		// 获取请求体
		System.out.println( "【请求body体】" +  (template.body()==null?"空":new String(template.body())) );
		// ???不明确作用
		template.bodyTemplate("bodyTemplate", Charset.forName("UTF-8"));
		
		// 设置请求方式，相当于手动更改请求方式
//		template.method(HttpMethod.GET);
		// 设置请求的uri -> /controller/method，相当于手动切换调用接口
//		template.uri("/abc");
		
		//
		System.out.println( "【请求method】" + template.method() );
		System.out.println( "【请求path】" + template.path() );
		System.out.println( "【请求url】" + template.url() );
		System.out.println( "【请求Charset】" + template.requestCharset() );
		System.out.println( "【请求bodyTemplate】" + template.bodyTemplate() );
	}
}
